SipHash implementation for Rust
This crates implements SipHash-2-4 and SipHash-1-3 in Rust.
It is based on the original implementation from rust-core and exposes the same API.
It also implements SipHash variants returning 128-bit tags.
The sip
module implements the standard 64-bit mode, whereas the sip128
module implements the 128-bit mode.
Usage
In Cargo.toml
:
[]
= "1"
If you want serde support, include the feature like this:
[]
= { = "1", = ["serde"] }
64-bit mode:
use ;
// one-shot:
let array: & = &;
let key: & = &;
let hasher = new_with_key;
let h = hasher.hash;
// incremental:
use Hasher;
let array1: & = &;
let array2: & = &;
let key: & = &;
let mut hasher = new_with_key;
hasher.write;
hasher.write;
let h = hasher.finish;
128-bit mode:
use ;
// one-shot:
let array: & = &;
let key: & = &;
let hasher = new_with_key;
let h = hasher.hash.as_bytes;
// incremental:
use Hasher;
let array1: & = &;
let array2: & = &;
let key: & = &;
let mut hasher = new_with_key;
hasher.write;
hasher.write;
let h = hasher.finish128.as_bytes;
API documentation
Note
Due to a confusing and not well documented API, methods from the Hasher
trait of the standard library (std::hash::Hasher
, core::hash::Hasher
) produce non-portable results.
This is not specific to SipHash, and affects all hash functions.
The only safe methods in that trait are write()
and finish()
.
It is thus recommended to use SipHash (and all other hash functions, actually) as documented above.